package com.thx.information.dao;

import com.thx.common.orm.PaginationDao;
import com.thx.information.model.InfoVoteLog;

import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class InfoVoteLogDao extends PaginationDao<InfoVoteLog> {

  private static final Logger logger = LoggerFactory.getLogger(InfoVoteLogDao.class);

//  @SuppressWarnings("unchecked")
//  public List<InfoVoteLog> queryAll(InfoVoteLog info, final int start, final int limit) {
//    String hql = getHql(info);
//    List<InfoVoteLog> list = createQuery(hql).setFirstResult(start).setMaxResults(limit).list();
//    return list;
//  }
//
//  @SuppressWarnings("unchecked")
//  public int queryCount(InfoVoteLog info) {
//    String hql = "select count(*) " + getHql(info);
//    Object obj = createQuery(hql).uniqueResult();
//    if (obj != null) {
//      return Integer.parseInt(obj.toString());
//    } else {
//      return 0;
//    }
//  }
//
//  /**
//   * 查询栏目列表sql语句 建立日期 : Apr 23, 2013 <br>
//   * 作者 : 王阿敏<br>
//   * 
//   * @param info
//   * @return
//   */
//  public String getHql(InfoVoteLog info) {
//    String hql = "from InfoVoteLog c where 1=1";
//    if (info.getInfoId() != null) {
//      hql += " and c.infoId = " + info.getInfoId();
//    }
//    if (info.getEnterpriseId() != null) {
//      hql += " and c.enterpriseId = " + info.getEnterpriseId();
//    }
//    if (info.getVoteItemId() != null) {
//      hql += " and c.voteItemId = " + info.getVoteItemId();
//    }
//    return hql;
//  }

//  /**
//   * 投票选项与投票记录关联查询 建立日期 : May 11, 2013 <br>
//   * 作者 : 王阿敏<br>
//   * 
//   * @param infoId
//   * @return
//   */
//  public List<InfoVoteLog> queryVoteLog(Long infoId) {
//    String hql =
//        "from InfoVoteItem i,InfoVoteLog v where i.infoId=? and i.voteItemId = v.voteItemId";
//    List<InfoVoteLog> list = createQuery(hql, new Object[] {infoId}).list();
//    return list;
//  }

  /**
   * 根据人员Id、信息Id查询该人员投票日志列表.
   * 
   * @param personnelId 人员Id,不能为空
   * @param infoid 信息Id,不能为空
   * @return 投票日志列表
   */
  public List<InfoVoteLog> findByPIdAndInfoId(Long personnelId, Long infoid) {
    String hql = "from InfoVoteLog where personnelId=? and infoId=? ";
    return createQuery(hql, new Object[] {personnelId, infoid}).list();
  }


  /**
   * 根据投票id查询该投票项所有日志列表.
   * 
   * @param voteItemId 投票项目id,不能为空
   * @return 所有日志列表
   */
  public List<InfoVoteLog> queryByItemId(Long voteItemId) {
    String hql = "from InfoVoteLog where voteItemId=?";
    return createQuery(hql, new Object[] {voteItemId}).list();
  }


  /**
   * 根据信息id查询总投票人数 .
   * 
   * @param infoId 信息Id,不能为空
   * @return 参与投票总人数
   */
  public int findVotePerCountByInfoId(Long infoId) {
    String hql = "select count(distinct v.personnelId) from InfoVoteLog v where v.infoId=? ";
    Object obj = createQuery(hql, new Object[] {infoId}).uniqueResult();
    return obj != null ? NumberUtils.toInt(obj.toString()) : 0;
  }

  /**
   * 根据投票项查询投票总数.
   * 
   * @param voteItemId 投票项目id,不能为空
   * @return 查询投票总数
   */
  public int findCountByVoteItemId(Long voteItemId) {
    String hql = "select count(*) from InfoVoteLog v where v.voteItemId=? ";
    Object obj = createQuery(hql, new Object[] {voteItemId}).uniqueResult();
    return obj != null ? NumberUtils.toInt(obj.toString()) : 0;
  }


  /**
   * 根据信息Id删除所有投票明细数据.
   * 
   * @param infoId 信息id,不能为空
   */
  public void deleteByInfoId(Long infoId) {
    String hql = "delete from InfoVoteLog where infoId=? ";
    createQuery(hql, new Object[] {infoId}).executeUpdate();
  }

}
